package main

import "fmt"

func main() {
	//声明数组
	var b  [5]  int

	//初始化数组
	var c = [2]int{1,2}

	//忽略数组大小
	var d = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

	fmt.Println(b,c,d)

	//三维整型数组
	var threedim [5][10][4]int
	fmt.Println(threedim)

	/* 数组 - 5 行 2 列*/
	var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
	var i, j int

	/* 输出数组元素 */
	for  i = 0; i < 5; i++ {
		for j = 0; j < 2; j++ {
			fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
		}
	}

	//定义时初始化下标为2的元素
	arr := [3]int{2:10}
	fmt.Println("定义时初始化下标为2的元素->",arr)

	arr2 := [3]int{10}
	fmt.Println("定义时初始化第一个元素->",arr2)

	//修改谋一数组中的值时，其他引用该值的数组也随着改变（底层数组指向的地址相同）
	arr3 := [] int{3,1,2,5,6,3,6}
	s1 := arr3[1:3]
	s2 := arr3[2:7]

	fmt.Println("未修改数组中的元素之前->",s1,s2)
	//当s2元素超过arr3的容量时，s2则会指向新的底层数组
	//s2 = append(s2,2,21,1,224,5,56,3,32,32,12,5,3)
	s1[1] = 90
	fmt.Println("未修改数组中的元素之后->",arr3,s1,s2)


	keng()
}

//坑
func keng()  {
	a := make([]int,0)
	fmt.Println("数组a：",a)
	a = keng_f2(a)

	fmt.Println("数组a扩容后：",a)

}

//因为a初始容量为0，添加元素后扩容，引用地址已改
func keng_f1(a []int)  {
	a = append(a,10)
}

//返回扩容后的数组
func keng_f2(a []int) []int {
	a = append(a,10)
	return a
}
